package com.briup.corejava.day18;

import java.io.*;

/**
 * 字符缓冲流
 * BufferedReader：readLine()
 * BufferedWriter
 * PrintWriter：println()
 */
public class Test4 {

    public static void main(String[] args) {
        // 要求使用字符缓冲流完成数据读取，并写出到文件中
        FileReader fr = null;
        FileWriter fw = null;
        BufferedReader br = null;
        // 以下两个选一个即可
        BufferedWriter bw = null;
        PrintWriter pw = null;

        try {
            fr = new FileReader("src/com/briup/corejava/day17/file/a.txt");
            fw = new FileWriter("src/com/briup/corejava/day18/file/b.txt");
            br = new BufferedReader(fr);
            bw = new BufferedWriter(fw);
            pw = new PrintWriter(fw);

            // 定义一个标准输出流
            PrintStream ps = new PrintStream("src/com/briup/corejava/day18/file/b.txt");
            // 修改标准输出的目的地
            // System.setOut(ps);
            System.setOut(null);

            // 读取数据
            String s = null;
            while((s=br.readLine())!=null){
                // 使用原配
//                bw.write(s);
//                // 如果还有数据，让bw写一个换行符
//                if(br.ready()){
//                    bw.newLine();
//                }
                // 使用bw和pw都测试一下
                // 使用标准输出
                System.out.println(s);
            }
            System.out.println("数据写出完毕...");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            if(bw!=null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(fw!=null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(fr!=null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
